package priv.conceit.study.book.thread.chapter3.parts1;

/**
 * 3.1
 * 线程的sleep方法
 * <p>
 * sleep是一个静态方法 有两个重载方法
 * {@link java.lang.Thread#sleep(long)}
 * {@link java.lang.Thread#sleep(long, int)}
 * <p>
 * sleep会使线程进入指定毫秒数的休眠状态 暂停执行
 * 但是具体的休眠时间需要以系统的定时器和调度器的精度为准
 * 关键是sleep不会使线程放弃monitor锁的执行权
 * <p>
 * 推荐使用1.5之后的TimeUnit枚举类代替sleep方法
 * {@link java.util.concurrent.TimeUnit}
 *
 * @author Conceit
 * @since 1.0.0, 2019/6/14
 */
public class Sleep {

	/**
	 * 新建线程 以及main线程分别 测试 sleep方法
	 * sleep方法只会影响当前线程
	 *
	 * @param args
	 */
	public static void main(String[] args) {

		new Thread(() -> {
			long startTime = System.currentTimeMillis();
			sleep(200L);
			long endTime = System.currentTimeMillis();
			Thread.currentThread().setName("testSleepMethod");
			System.out.println(Thread.currentThread().getName());
			System.out.println("differ time-->" + (endTime - startTime));
		}).start();

		long startTime = System.currentTimeMillis();
		sleep(2000L);
		long endTime = System.currentTimeMillis();
		System.out.println(Thread.currentThread().getName());
		System.out.println("differ time-->" + (endTime - startTime));
	}

	/**
	 * @param time
	 * @description: sleep
	 * @return: void
	 * @author: conceit
	 * @date: 2019/6/14 14:59
	 */
	public static void sleep(long time) {
		try {
			Thread.sleep(time);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}


}
